package src.itheima05;

import java.util.Properties;
import java.util.Set;

/*
    java.util.Map<K,V> 双列集合的根接口
    实现类:
        java.util.Hashtable<K,V>和ava.util.HashMap<K,V>集合的区别?
            1.Hashtable<K,V>不允许null键和null值
            2.HashMap<K,V>允许null键和null值
            3.HashMap线程不同步,不安全,效率高        ------使用-----
            4.Hashtable线程同步,安全,效率低          ------不使用-----

    虽然Hashtable已经不用了,但是子类Properties很常用

    java.util.Properties类: 属性集  属性名=属性值     age=18  name=zhangsan gender=nan
        1.Properties类是Map集合的实现类,Map中定义的方法,都有
        2.Properties类继承Hashtable<K,V>时,已经确定了K的类型: Object,V的类型: Object,
            Properties类就没有泛型了,创建Properties类的对象时,不能指定泛型
        3.Properties类提供了很多参数和返回值都是String的方法
        4.Properties类是唯一一个和IO流结合使用的双列集合
    使用:
        空参构造:
            public Properties(): 直接new对象

    特有方法:
        - public Object setProperty(String key, String value) ： 保存一对属性(一个键值对)。
            等价于Map集合的:
                public V put(K k,V v): 添加一个键值对


        - public String getProperty(String key)  ：使用此属性列表中指定的键搜索属性值。根据键获取值
            等价于Map集合的:
                public V get(K k): 根据键获取值


        - public Set<String> stringPropertyNames()  ：所有键的名称的集合。
            根据键获取值:
                public Set<K> keySet(): 获取所有的键组成的Set集合对象
 */
public class Demo01Properties {
    public static void main(String[] args) {
        //创建Properties集合对象
        Properties props = new Properties();

        //setProperty方法添加多个键值对
        props.setProperty("name","zhangsan");
        props.setProperty("age","18");
        props.setProperty("gender","nan");
        System.out.println(props);
        System.out.println("------------");

        //getProperty(String key): 根据键获取值
        String name = props.getProperty("name");
        String age = props.getProperty("age");
        String gender = props.getProperty("gender");
        System.out.println(name+"...."+age+"..."+gender);
        System.out.println("------------");

        //Set<String> stringPropertyNames()  ：所有键的名称的集合
        Set<String> names = props.stringPropertyNames();

        //增强for遍历
        for (String key : names) {
            //根据键获取值
            String value = props.getProperty(key);
            System.out.println(key+"::::"+value);
        }

    }
}
